﻿package com.eitb.plantillas{
	import flash.net.*;
	import flash.geom.*;
	import flash.utils.*;
	import flash.events.*;
	import flash.display.*;
	import com.eitb.literales.*;
	import com.eitb.formaters.*;
	import com.eitb.factorias.*;
	import com.eitb.plantillas.*;
	import com.eitb.cargadores.*;
	import com.eitb.programas.menu.*;	
	import com.eitb.rutas.*;
//	import com.eitb.programas.menu.utils.*;	

	public class ModeloPortada implements IControladorPlantilla,IControladorPlantillaMultimedia,IControladorPlantillaPortada,IControladorCargador {
		private static const RUTA_IMAGENES:String = "http://www.eitb.com/multimedia/images/";		
		private const TIEMPO:int = 36000000;
		private var timer:Timer;

		private var vPlantilla:IVistaPlantilla; // controla las funciones basicas: addChild y setVisible
		private var vPlantillaMultimedia:IVistaPlantillaMultimedia; // tiene los controles de los textos y las imagenes
		private var vPlantillaPortada:IVistaPlantillaPortada; // tiene los controles de las funcionalidad de la portada
		private var vCargador:IVistaCargador; // tiene los controles del cargador

		private var textosXml:XMLList;
		private var imagenesXml:XMLList;

		private var cargando:Boolean;
		private var nImagen:int;
		
		private var literalesCargador:ILiterales;
		private var literalesEnlace:ILiterales;
		private var idioma:int;
		private var enlaceUrl:URLRequest;		


		public function ModeloPortada():void {
			this.cargando = false;
			this.nImagen = 0;
		}
		
		public function initVistaPlantilla(vPlantilla:IVistaPlantilla):void {
			this.vPlantilla = vPlantilla;
		}

		public function initVistaPlantillaMultimedia(vPlantillaMultimedia:IVistaPlantillaMultimedia):void {
			this.vPlantillaMultimedia = vPlantillaMultimedia;
		}

		public function initVistaPlantillaPortada(vPlantillaPortada:IVistaPlantillaPortada):void {
			this.vPlantillaPortada = vPlantillaPortada;
			this.initTimer(this.TIEMPO);
		}
		public function initVistaCargador(vCargador:IVistaCargador):void {
			this.vCargador = vCargador;
		}
		
		public function initIdioma(idioma:int):void {
			this.idioma = idioma;
		}
		
		public function initLiteralesCargador(literales:ILiterales) {
			this.literalesCargador = literales;
			this.vCargador.setCargadorInfo(this.literalesCargador.getLiteral(CargadorLiterales.DESCARGANDO));
		}
		
		public function initLiteralesEnlace(literales:ILiterales) {
			this.literalesEnlace = literales;
		}		
		
		public function initTextos(textosXml:XMLList):void {
			this.textosXml=textosXml;
			this.vPlantillaMultimedia.setTextos(textosXml);
		}
		public function initEnlaceUrl(url:URLRequest):void {
			this.enlaceUrl = url;
			if (null == url) {
				this.vPlantillaMultimedia.setEnlaceVisible(false);
			} else {
				this.vPlantillaMultimedia.setEnlaceVisible(true);				
				this.vPlantillaMultimedia.setEnlaceUrl(url);
				this.vPlantillaMultimedia.setEnlaceText(this.literalesEnlace.getLiteral(EnlaceLiterales.PULSAR));
			}			
		}
		
		public function initImagenes(imagenesXml:XMLList):void {
			this.imagenesXml=imagenesXml;
		}
		private function initTimer(tiempo:int):void {
			this.timer = new Timer(tiempo, 1);
			this.timer.addEventListener("timer", timerHandler);
		}
		private function timerHandler(event:TimerEvent):void {
			this.timer.removeEventListener("timer", timerHandler);
			this.timer = null;
			this.vPlantillaPortada.saltar(Main.PORTADA, Main.MENU);
			this.vPlantilla.setVisible(false);
		}

		// PORTADA
		public function clickRaton(event:MouseEvent):void {
			this.timer.removeEventListener("timer", timerHandler);
			this.timer = null;
			this.vPlantilla.setVisible(false);
			this.vPlantillaPortada.saltar(Main.PORTADA, Main.MENU);
		}
		// PORTADA
		// CARGADOR
		public function addElementos(numero:int):void {
		}
		public function removeElementos(numero:int):void {
		}
		private function setCargadorInfo(porcentaje:Number):void {
			this.vCargador.setCargadorContador(new PercentFormater(porcentaje).format(this.idioma));	
			this.vCargador.setCargadorProgress(porcentaje);			
			this.vCargador.setCargadorVisible(porcentaje != 1);
		}			
		// CARGADOR
		// CARGA IMAGENES
		public function loadImagenes():void {
			if (! this.cargando) {
				var loader:Loader;
				var archivo:URLRequest;

				for each (var imagen in this.imagenesXml..imagen) {
					loader=new Loader();
					archivo= new Rutas().getRutaImagen(imagen);
					this.configureListeners(loader.contentLoaderInfo);
					try {
						loader.load(archivo);
					} catch (error:Error) {
						trace("Unable to load requested document.");
					}
				}
			}
		}

		private function completeHandler(event:Event):void {
			var loader:Loader=Loader(event.target.loader);
			var bitmap:Bitmap=Bitmap(loader.content);
			this.removeElementos(1);
			bitmap.cacheAsBitmap=true;
			bitmap.width = this.vPlantillaMultimedia.getImagenWidth(this.nImagen);
			bitmap.height = this.vPlantillaMultimedia.getImagenHeight(this.nImagen);
			this.vPlantillaMultimedia.setImagenBitmap(this.nImagen, bitmap);
			this.nImagen+= 1;
			this.timer.start();
			this.setCargadorInfo(1);
		}

		private function initHandler(event:Event):void {
			this.cargando=true;
			this.setCargadorInfo(0);
		}

		private function progressHandler(event:ProgressEvent):void {
			this.setCargadorInfo(event.bytesLoaded / event.bytesTotal);
		}

		private function configureListeners(dispatcher:IEventDispatcher):void {
			dispatcher.addEventListener(Event.COMPLETE,completeHandler);
			dispatcher.addEventListener(Event.INIT,initHandler);
			dispatcher.addEventListener(ProgressEvent.PROGRESS,progressHandler);
		}
		// CARGA IMAGENES
	}
}